package eitwitter.storage;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Classe permettant de stocker le texte complet d'un tweet
 * et le nom de la societe dont il est question et sa polarite.
 * @author AH & PJ
 */
public class Tweet {
	
	/** Societe a laquelle est relatif le tweet */
	private Company company;
	
	/** Polarite du tweet */ 
	private Category category;
	
	/** Contenu complet du tweet */
	private String content;

	public Tweet(String content, Company company, Category category) {
		this.company = company;
		this.content = content;
		this.category = category;
	}
	
	public Tweet(String content, Company company) {
		this.company = company;
		this.content = content;
	}

	public Company getCompany() {
		return company;
	}

	public void setCompany(Company company) {
		this.company = company;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	public Category getCategory() {
		return category;
	}

	public void setCategory(Category category) {
		this.category = category;
	}
	
	/**
	 * Cree un objet Tweet a partir de la chaine de caracteres passee en parametre
	 * @param string Texte a convertir en objet Tweet
	 * @return Objet Tweet contenant les informations de la chaine passee en parametre
	 */
	public static Tweet createFromString(String string){
		
		// Expression reguliere pour le traitement de la chaine
		Pattern p = Pattern.compile("^\\(([a-z]+)\\,([a-z]+)\\)[\\s]*(.*)");
		Matcher m = p.matcher(string);
		m.find();
		
		// Recuperation de la polarite du tweet
		String category = m.group(1);
		
		// Recuperation de la societe du tweet
		String company = m.group(2);
		
		// Recuperation du contenu textuel du tweet
		String content = m.group(3);
		
		if(category.equals("xxx"))
			return new Tweet(content, Company.valueOf(company.toUpperCase()));
		
		// Retourne l'instance de Tweet remplie
		return new Tweet(content, Company.valueOf(company.toUpperCase()), Category.valueOf(category.toUpperCase()));
	}

	public int lenght(){
		return this.content.length();
	}
	
	/**
	 * Chaine de caracteres representant de maniere complete un tweet et ses caracteristiques
	 * @return Representation de l'objet sous forme de chaine de caracteres
	 */
	@Override
	public String toString() {
		return this.company + " - " + this.category + " : " + this.content;
	}
	
	
}
